import request from "@/utils/request";

const File_Manage_BASE_URL = "/system/file/manage";

const FileAPI = {
  /** 文件上传地址 */
  uploadUrl:
    import.meta.env.VITE_APP_BASE_API + File_Manage_BASE_URL + "/create",

  /** 获取文件管理分页数据 */
  getPage(queryParams?: FileManagePageQuery) {
    return request<any, PageResult<FileManagePageVO[]>>({
      url: `${File_Manage_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },
  /**
   * 获取文件管理表单数据
   *
   * @param id ConfigID
   * @returns Config表单数据
   */
  getFormData(id: number) {
    return request<any, FileManageForm>({
      url: `${File_Manage_BASE_URL}/form/${id}`,
      method: "get",
    });
  },

  /**
   * 上传文件
   *
   * @param file
   */
  upload(file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return request<any, FileInfo>({
      url: `${File_Manage_BASE_URL}/create`,
      method: "post",
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  },

  /**
   * 更新文件管理
   *
   * @param id ID
   * @param data 表单数据
   */
  modify(id: number, data: FileManageForm) {
    return request({
      url: `${File_Manage_BASE_URL}/modify`,
      method: "put",
      data: data,
    });
  },

  /**
   * 删除文件
   *
   * @param id 文件id
   */
  deleteById(id?: number) {
    return request({
      url: `${File_Manage_BASE_URL}/delete/${id}`,
      method: "delete",
    });
  },

  /**
   * 下载文件
   * @param url
   * @param fileName
   */
  downloadFile(url: string, fileName?: string) {
    return request({
      url: url,
      method: "get",
      responseType: "blob",
    }).then((res) => {
      const blob = new Blob([res.data]);
      const a = document.createElement("a");
      const url = window.URL.createObjectURL(blob);
      a.href = url;
      a.download = fileName || "下载文件";
      a.click();
      window.URL.revokeObjectURL(url);
    });
  },
};

export default FileAPI;

/** $文件管理分页查询参数 */
export interface FileManagePageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;
}

/** 文件管理表单对象 */
export interface FileManageForm {
  /** 主键 */
  id?: number;
  /** 文件名称 */
  name?: string;
  remark?: string;
}

/** 文件管理分页对象 */
export interface FileManagePageVO {
  /** 主键 */
  id?: number;
  /** 文件名称 */
  name?: string;
  /** 文件键 */
  size?: number;
  /** 文件值 */
  type?: string;
  /** md5 */
  md5?: string;
  /** 平台 */
  platform?: string;
  /** 上传者id */
  userId?: number;
  /** 上传时间 */
  createTime?: Date;
  /** 后缀 */
  suffix?: string;
  /** url */
  url?: string;
  /** 路径 */
  path?: string;
}

/**
 * 文件API类型声明
 */
export interface FileInfo {
  /** 文件名 */
  name: string;
  /** 文件路径 */
  url: string;
}
